Verilog仿真中,读txt文件和写txt文件的方法

您所在的位置:网站首页 verilog 矩阵数组 Verilog仿真中,读txt文件和写txt文件的方法

Verilog仿真中,读txt文件和写txt文件的方法

2023-07-25 13:42| 来源: 网络整理| 查看: 265

一、读txt文件

此过程一般分为两步:

1、利用MATLAB生成txt文件

MATLAB上生成的txt文件的格式为每行一个数据,与coe文件不同的是,数据之间没有逗号。由于verilog的读txt的系统函数仅仅能识别十六进制和二进制数据,一般情况下,将数据转换为十六进制数比较方便。当数据为有符号数时,可以采用下面的方式生成txt文件:

fid= fopen('data_signed.txt','w'); % fprintf(fid,'%d',data_signed); fprintf(fid,'%04x\r\n',typecast(int16(data_signed),'uint16')); fclose(fid);

其中,typecast(int16(data_signed),‘uint16’) 可以将数据转变为补码形式。同时,需要注意的是,在换行中,需要采用’\r\n‘,不能仅仅使用’\r’。

2、在testbench上读写

读txt文件时,一般选择先将txt中的数据置入寄存器memory中,然后按照地址读出memory中的数据。

reg [15:0] mem [0:1023]; reg [9:0] addr ; reg [11:0]data_out ; initial begin $readmemh("E:/self-study/VIVADO_workspace/prj/data_signed.txt",mem); addr = 10'd0; end always #10 begin data_out = mem[addr][11:0]; addr = addr + 10'd1; end

需要注意的是,txt文件的地址不能出错,另外,注意地址分隔符需要用’/‘,windos系统中的’\‘需要对应改过来才能使用。

二、写txt文件 integer handle; initial begin handle = $fopen("E:/self-study/VIVADO_workspace/prj/data_out.txt"); end always@(posedge sys_clk) begin if(data_in_valid) begin $fdisplay(handle,"%d",data_out); end end

利用initial函数初始化handle的值,另外,地址分隔符同样要改回来。

如果仿真之后,txt文件中并没有内容,可以尝试刷新一下txt文件。如果还没有内容出现,则就是txt文件没有关闭造成的,解决方法有两种: ①直接关闭xsim仿真程序,此时txt文件自动关闭,内容出现。 ②使用$fclose函数关闭文件,如果使能变量aagc_in_valid是一段高电平信号,则可以检测该信号的下降沿,在此时关闭文件即可:

reg [2:0] valid_reg; always@(posedge sys_clk) begin valid_reg


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3